package redis

import (
	"github.com/garyburd/redigo/redis"
	"github.com/rs/zerolog/log"
)

// SADD 将一个或多个 member 元素加入到集合 key 当中，已经存在于集合的 member 元素将被忽略。
// 假如 key 不存在，则创建一个只包含 member 元素作成员的集合。
// 当 key 不是集合类型时，返回一个错误。
func (db *Conn) SADD(args ...interface{}) error {
	_, err := db.Conn.Do("SADD", args...)
	return err
}

// SISMEMBER 判断 value 元素是否集合 key 的成员
// 如果 member 元素是集合的成员，返回 true 。 如果 member 元素不是集合的成员，或 key 不存在，返回 false 。
func (db *Conn) SISMEMBER(key string, value string) bool {
	exists, err := redis.Bool(db.Conn.Do("SISMEMBER", key, value))
	if err != nil {
		log.Error().Str("key", key).Msg("SISMEMBER操作错误")
	}
	return exists
}

// SREM 移除集合 key 中的一个或多个 member 元素，不存在的 member 元素会被忽略。
// 当 key 不是集合类型，返回一个错误。
func (db *Conn) SREM(key string, member ...interface{}) error {
	_, err := db.Conn.Do("SREM", key, member)
	return err
}

// SCARD 返回集合 key 的基数(集合中元素的数量)。
// 集合的基数。 当 key 不存在时，返回 0 。
func (db *Conn) SCARD(key string) int {
	score, err := redis.Int(db.Conn.Do("SCARD", key))
	if err != nil {
		log.Error().Str("key", key).Msg("SCARD操作错误")
	}
	return score
}

// SMEMBERS 返回集合 key 中的所有成员。
// 不存在的 key 被视为空集合。
func (db *Conn) SMEMBERS(key string) []string {
	result, err := redis.Strings(db.Conn.Do("SMEMBERS", key))
	if err != nil {
		log.Error().Str("key", key).Msg("SMEMBERS操作错误")
	}
	return result
}
